#ifndef KURCACI_H
#define KURCACI_H

#ifndef OBJECT_H
#include "Object.h"
#endif

#ifndef PLAYER_H
#include "player.h"
#endif

//class kurcaci
//class orang tua dari ketiga kurcaci
//	integer x
//		koordinat di bidang x dimana kurcaci berada
//	integer y
//		koordinat di bidang y dimana kurcaci berada
//	integer status_sleep
//		Variabel boolean yang bernilai true jika sedang sleep dan false jika sedang tidak sleep
//	integer vector
//		berupa x dan y keadaan sekitar kurcaci
//	boolean isgabut
//		isgabut bernilai true saat pertama kali diciptakan
//		bernilai true saat kurcaci bangun namun tidak ada pekerjaan di field yang bisa dikerjakan olehnya
//	boolean issleep
//		issleep bernilai true saat pertama kali diciptakan
//		berubah saat player membangunkan kurcaci
//	void walk
//		Berjalan saat player berjalan, kearah dimana kurcaci tersebut apabila isgabut bernilai false.
//	void face
//		Menghadap ke suatu direction dimana kurcaci tersebut dapat melakukan pekerjaan secara optimal
//		Vector diubah



class Kurcaci : public Object {

	protected :
	
	bool status_sleep;
	point vektor;
	pos location;
	int face;
	bool found;//ketemu target
	int faceto;//pengen ngadep kemana kalo -1 lagi gak ada hambatan
	int searchdir;//arah gerak kalo -1 lagi gak ada hambatan dari seblomnya
	
	public :
	
	//integer getObjectType 
	//	mengembalikan tipe object
	int getObjectType() const;
		
	//constructor, copy constructor, destructor
	Kurcaci();
	//Kurcaci(const Kurcaci&);
	~Kurcaci();
	
	//void SetX
	//	set location.x = new_x
	void SetX(int);
	
	//void SetY
	//	set location.y = new_y	
	void SetY(int);
	
	//void GetX
	//	get location.x
	int GetX() const;
	
	//void GetY
	//	get location.y
	int GetY() const;
	
	//bool status_sleep
	//bernilai 1 jika tidur
	//bernilai 0 jika bangun
	int GetStatusSleep() const;
	
	point getpos() const;
	
	point getvektor() const;
	
	int getFace() const;
	
	void setpos(int, int);  //set position
	
    void setvektor(point);
	
	void setFace (int);     //set the direction face
	
	//bool isgabut
	//bernilai 1 jika tidak ada pekerjaan di lahan yang dapat dikerjakan kurcaci tersebut 
	//bernilai 0 jika ada
	bool isgabut() const;
	
	//bool issleep
	//bernilai 1 jika kurcaci tidur
	//bernilai 0 jika kurcaci bangun
	bool isSleep() const;

	//abstract void walk()
	//jika isgabut==false
	//membuat kurcaci berjalan kearah dimana terdapat pekerjaan yang dapat dilakukan kurcaci tersebut
	virtual void walk(field*,int,int,int,int,int,int,int,int){
	
	};
	
	void Sleep();
	
	void Wake();
	
	virtual point NearestPoint(field*)=0;
	
	void turn_left();
    void turn_right();
    void turn_up();
    void turn_down();
	
	void moveLeft(field*,int,int,int,int,int,int,int,int);        
    void moveRight(field*,int,int,int,int,int,int,int,int);       
    void moveUp(field*,int,int,int,int,int,int,int,int);          
    void moveDown(field*,int,int,int,int,int,int,int,int);        

};

#endif

